package initialize

import (
	"github.com/arl/statsviz"
	"github.com/gin-contrib/pprof"
	"github.com/gin-gonic/gin"
	swaggerFiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
	"mine-info-server/global"
	"mine-info-server/middleware"
	"mine-info-server/router"
)

// 初始化总路由

func Routers() *gin.Engine {
	Router := gin.Default()
	global.GVA_LOG.Info("pprof启动")
	pprof.Register(Router)
	// 如果想要不使用nginx代理前端网页，可以修改 web/.env.production 下的
	// VUE_APP_BASE_API = /
	// VUE_APP_BASE_PATH = http://localhost
	// 然后执行打包命令 npm run build。在打开下面4行注释
	// Router.LoadHTMLGlob("./dist/*.html") // npm打包成dist的路径
	// Router.Static("/favicon.ico", "./dist/favicon.ico")
	// Router.Static("/static", "./dist/assets")   // dist里面的静态资源
	// Router.StaticFile("/", "./dist/index.html") // 前端网页入口页面

	// Router.Use(middleware.LoadTls())  // 打开就能玩https了
	global.GVA_LOG.Info("use middleware logger")
	// 跨域
	// Router.Use(middleware.Cors()) // 如需跨域可以打开
	global.GVA_LOG.Info("use middleware cors")
	Router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
	global.GVA_LOG.Info("register swagger handler")
	// 方便统一添加路由组前缀 多服务器上线使用

	// 监控启动
	Router.GET("/debug/statsviz/*filepath", func(context *gin.Context) {
		if context.Param("filepath") == "/ws" {
			statsviz.Ws(context.Writer, context.Request)
			return
		}
		statsviz.IndexAtRoot("/debug/statsviz").ServeHTTP(context.Writer, context.Request)
	})

	// 获取路由组实例
	systemRouter := router.RouterGroupApp.System
	PublicGroup := Router.Group("/manage-api/v1")
	PublicGroup.Use(middleware.GinRecovery(false)).
		Use(middleware.Token()).            // 添加权限控制
		Use(middleware.RecordOnlineUsers()) // 记录网站在线用户数
	{
		// 健康监测
		PublicGroup.GET("/health", func(c *gin.Context) {
			c.JSON(200, "ok")
		})
	}
	{
		systemRouter.InitAdminUserRouter(PublicGroup)    // 注册管理员路由
		systemRouter.InitTodoTaskRouter(PublicGroup)     // 注册待办任务路由
		systemRouter.InitBlessingWordRouter(PublicGroup) // 注册鸡汤文案路由
		systemRouter.InitPlanRouter(PublicGroup)         // 注册计划路由
		systemRouter.InitBasicRouter(PublicGroup)        // 注册公共服务路由
	}

	//=====================================以下接口都需要做鉴权操作============================================
	//PrivateGroup := Router.Group("")
	//PrivateGroup.Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()).Use(middleware.GinRecovery(false))
	{
		//systemRouter.InitApiRouter(PrivateGroup)     // 注册功能api路由
		//systemRouter.InitJwtRouter(PrivateGroup)     // jwt相关路由
		//systemRouter.InitSysUserRouter(PrivateGroup) // 注册用户路由
		//systemRouter.InitSysRoleRouter(PrivateGroup) // 注册角色路由
		//systemRouter.InitMenuRouter(PrivateGroup)    // 注册menu路由
		//systemRouter.InitButtonRouter(PrivateGroup)  // 注册按钮路由
		////exampleRouter.InitFileUploadAndDownloadRouter(PrivateGroup) // 文件上传下载功能路由
		//systemRouter.InitFileUploadAndDownloadRouter(PrivateGroup) // 文件上传路由
		//systemRouter.InitCasbinRouter(PrivateGroup)                // 权限相关路由
		//systemRouter.InitSysLaboratoryRouter(PrivateGroup)         // 注册实验室路由
		//systemRouter.InitSysApplyRouter(PrivateGroup)              // 注册选座申请路由
		//systemRouter.InitSysDataShareRouter(PrivateGroup)          // 注册资源分享路由
		//systemRouter.InitSysOperationRecordRouter(PrivateGroup)  // 操作记录

		//
		//indexRouter.InitCarouselRouter(PrivateGroup) // 轮播图路由
		//indexRouter.InitFoodRouter(PrivateGroup)     // 美食路由
		//indexRouter.InitMemorialDayRouter(PrivateGroup) // 纪念日路由
	}

	//InstallPlugin(PublicGroup, PrivateGroup) // 安装插件

	global.GVA_LOG.Info("router register success")
	return Router
}
